package co.edu.uniquindio.logica;

import static javax.persistence.TemporalType.DATE;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
/**
 * 
 * esta clase representa  un automovil en la logica de nuestro modelo de negocio
 * @author Andres Felipe Abril 
 * @author Luis Enrique Robledo
 *
 */
@Entity
@Table(name="Automovil")
public class Automovil implements Serializable{

	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	/**
	 * este atributo representa en numero de la placa en nuestro automovil y es la llave primaria de la clase
	 */
	@Id
	private String numeroPlaca;
	/**
	 * esta relacion nos indica que un automovil puede tener  un color
	 */
	@ManyToOne
	private Color color;
	/**
	 * esta relacion nos indica  que un automovil puede tener un modelo 
	 */
	@ManyToOne
	private Modelo modelo;
	/**
	 * esta relacion nos indica que un automovil  puede tener un vendedor
	 */
	@ManyToOne
	private Vendedor vendedor;
	/**
	 * este atributo representa la fecha en que el automovil sale al mercado
	 */
	@Temporal(DATE)
	private Date fecha;
	/**
	 * este atributo representa el  kilometraje del automovil
	 */
	private String kilometraje;
	/**
	 * esta relacion nos indica que un autmovil tiene un motor
	 */
	@OneToOne
	private Motor motor;
	
	/**
	 * este metodo me permite agregar un automovil
	 * @param el color del automovil
	 * @param el modelo del automovil
	 * @param el vendedor del automovil
	 * @param la fecha en que salio al mercado el automovil
	 * @param el cilindraje del automovil
	 * @param el kilometraje del automovil
	 */
	public Automovil( String placa, Color color , Modelo modelo , Vendedor vendedor,Date fecha  , String kilometraje,Motor motor)
	{
		this.numeroPlaca=placa;
		this.color=color;
		this.modelo=modelo;
		this.vendedor=vendedor;
		this.fecha=fecha;
		this.kilometraje=kilometraje;
		this.motor=motor;
	}
	
	/**
	 * este es el constructor obligatorio
	 */
	public Automovil()
	{
		
	}
	
	/**
	 * este metodo  permite obtener el color del automovil
	 * @return el color del automovil
	 */
	public Color getColor() {
		return color;
	}
	/**
	 * este metodo permite modificar el color del automovil
	 * @param el  nuevo color del automovil
	 */
	public void setColor(Color color) {
		this.color = color;
	}
	/**
	 * este metodo  permite obtener el modelo del automovil
	 * @return el modelo del automovil
	 */
	public Modelo getModelo() {
		return modelo;
	}
	/**
	 * este metodo  permite modificar el modelo del automovil
	 * @param el nuevo modelo del automovil
	 */
	public void setModelo(Modelo modelo) {
		this.modelo = modelo;
	}
	/**
	 * este metodo  permite obtener al vendedor del automovil
	 * @return el vendedor del automovil
	 */
	public Vendedor getVendedor() {
		return vendedor;
	}
	/**
	 * este metodo  permite modificar el vendedor de un automovil
	 * @param el nuevo vendedor
	 */
	public void setVendedor(Vendedor vendedor) {
		this.vendedor = vendedor;
	}
	/**
	 * este metodo  permite obtener la fecha en que salio al mercado el automovil
	 * @return la fecha del automovil
	 */
	public Date getFecha() {
		return fecha;
	}
	/**
	 * este metodo permite modificar la fecha del automovil
	 * @param la fecha del automovil
	 */
	public void setFecha(Date fecha) {
		this.fecha = fecha;
	}
	
	/**
	 * este metodo  permite obtener el kilometraje del automovil
	 * @return el kilometraje del automovil
	 */
	public String getKilometraje() {
		return kilometraje;
	}


	/**
	 * este metodo me permite obtener el numero de placa del automovil
	 * @return el numeroPlaca del automovil
	 */
	public String getNumeroPlaca() {
		return numeroPlaca;
	}
	/**
	 * este metodo permite modificar el numero de placa del automovil
	 * @param el numero de placa del actumovil 
	 */
	public void setNumeroPlaca(String numeroPlaca) {
		this.numeroPlaca = numeroPlaca;
	}
	/**
	 * 
	 * este metodo me permite modoficar el kilometraje del automovil
	 * @param el kilometraje del automovil
	 */
	public void setKilometraje(String kilometraje) {
		this.kilometraje = kilometraje;
	}
	/**
	 * este metodo me permite obtener el motor del automovil
	 * @return el motor del automovil
	 */
	public Motor getMotor() {
		return motor;
	}
	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return "Automovil [numeroPlaca=" + numeroPlaca + ", color=" + color
				+ ", modelo=" + modelo + ", vendedor=" + vendedor + ", fecha="
				+ fecha + ", kilometraje=" + kilometraje + ", motor=" + motor
				+ "]";
	}

	/**
	 * este metodo me permite modificar el motor del automovil
	 * @param motor el  nuevo motor del automovil
	 * 
	 */
	public void setMotor(Motor motor) {
		this.motor = motor;
	}
	/* (non-Javadoc)
	 * @see java.lang.Object#hashCode()
	 */
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((numeroPlaca == null) ? 0 : numeroPlaca.hashCode());
		return result;
	}
	/* (non-Javadoc)
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Automovil other = (Automovil) obj;
		if (numeroPlaca == null) {
			if (other.numeroPlaca != null)
				return false;
		} else if (!numeroPlaca.equals(other.numeroPlaca))
			return false;
		return true;
	}
}
